package com.vpen.clib.base.comtroller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.vpen.clib.base.entity.BaseEntity;
import com.vpen.clib.base.service.BaseService;
import com.vpen.clib.result.CResult;
import org.springframework.web.bind.annotation.*;

import java.io.Serializable;
import java.util.List;

/**
 * 描述
 *
 * @author 韦鹏
 * @date 2022/8/8 17:28
 */
public interface BaseController<Entity extends BaseEntity> {

    /**
     * 获取service
     *
     * @return com.vpen.clib.base.service.BaseService<Entity>
     * @author 韦鹏
     * @date 2022/8/12 14:18
     **/
    BaseService<Entity> getBaseService();


    /**
     * 分页查询
     *
     * @param page   分页
     * @param entity 条件
     * @return 多条数据
     * @author 韦鹏
     * @date 2022/8/12 14:17
     **/
    @GetMapping
    CResult<Page<Entity>> selectAll(Page<Entity> page, Entity entity);

    /**
     * 通过主键查询单条数据
     *
     * @param id 主键
     * @return 单条数据
     */
    @GetMapping("{id}")
    CResult<Entity> selectOne(@PathVariable Serializable id);

    /**
     * 新增数据
     *
     * @param entity 实体对象
     * @return 新增结果
     */
    @PostMapping
    CResult<Boolean> insert(@RequestBody Entity entity);

    /**
     * 修改数据
     *
     * @param entity 实体对象
     * @return 修改结果
     */
    @PutMapping
    CResult<Boolean> update(@RequestBody Entity entity);

    /**
     * 删除数据
     *
     * @param idList 主键结合
     * @return 删除结果
     */
    @DeleteMapping
    CResult<Boolean> delete(@RequestParam("idList") List<Long> idList);
}
